<?php

namespace app\admin\controller;

use Couchbase\UserSettings;
use think\Controller;
use think\Db;
use think\Request;

class Con2 extends Controller
{
    /**
     * 角色列表加载显示,遍历角色数据
     *
     * @return \think\response\View
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function func1()
    {
        // 查询角色 数据表中 所有的数据
        $list = Db::table('role')->select();

        // 获取 所有角色 ID
        foreach ($list as $k) {
            $role_id[] = $k['r_id'];
        }

        //  通过角色ID 查询 角色_权限 的所有数据
        for ($i=0;$i<sizeof($role_id);$i++) {
            $listd[] = Db::table('role_node')->where('r_id',$role_id[$i])->select();
        }

        // 通过权限ID 查询 权限数据表 所有有关角色信息
        for ($i=0;$i<sizeof($listd);$i++) {
            for ($j=0;$j<sizeof($listd[$i]);$j++) {
                $node_name[$listd[$i][$j]['r_id']][$listd[$i][$j]['n_id']] = Db::table('node')->field('n_nodename')->where('n_id',$listd[$i][$j]['n_id'])->find();
            }
        }
//        dump($node_name);die;
        return view('admin@con2/func1',['list'=>$list,'node_name'=>$node_name]);
    }

    /**
     * 角色添加页面加载
     *
     * @return \think\response\View
     */
    public function func2()
    {
        return view('admin@con2/func2');
    }

    /**
     * 角色权限修改，添加，加载角色修改页面
     *
     * @param $r_id
     * @return \think\response\View
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function edit($r_id)
    {
        // 查询当前 角色ID 的信息
        $list_role = Db::table('role')->find($r_id);

        // 查询 角色_权限 数据表 获取当前角色拥有 权限信息
        $list_role_node = Db::table('role_node')->where('r_id',$r_id)->order('n_id','asc')->select();

        // 获取 当前角色已拥有权限
        // 定义一个数组
        $oldNodeId = array();
        for ($i=0;$i<sizeof($list_role_node);$i++){
            $oldNodeId[] = $list_role_node[$i]['n_id'];
        }

        // 获取所有权限信息
        $list_node = Db::table('node')->order('n_id','asc')->select();

        // 删除 所有权限信息中 当前角色已有的 权限
        // 定义一个空数组
        $oldNode = array();
        for ($i=0;$i<sizeof($oldNodeId);$i++){
            for ($j=0;$j<sizeof($list_node);$j++){
                if (!empty($list_node[$j])){
                    if ($oldNodeId[$i] == $list_node[$j]['n_id']){
                        $oldNode[] = $list_node[$j];
                        array_splice($list_node,$j,1);
                    }
                }
            }
        }

        return view('admin@con2/edit',[
            'list_role'=>$list_role,
            'list_role_node'=>$list_role_node,
            'list_node'=>$list_node,
            'oldNode'=>$oldNode
        ]);
    }


    /**
     * 角色添加
     */
    public function doadd()
    {
        $p = input('post.');
        $data = ['r_rolename'=>$p['r_rolename']];
        $result = Db::table('role')->data($data)->insert();
        if ($result>0){
            return $this->success('添加成功！','admin/con2/func1');
        } else {
            return $this->error('添加失败！');
        }
    }

    /**
     * 处理权限更改数据，将数据添加到数据表
     *
     * @param Request $request
     * @param $r_id
     */
    public function doedit(Request $request,$r_id)
    {
        $info = $request->put();
        // 判断是否选择了权限
        if (!empty($info['node'])){
            // 删除 权限角色表中 所有 此ID下的数据
            Db::table('role_node')->where('r_id',$r_id)->delete($r_id);
            // 获取已选择的权限
            $data = $info['node'];
            // 获取 权限 ID
            foreach ($data as $k) {
                $n_id[] = $k;
            }
            
            $role_node = '';
            for ($i=0;$i<sizeof($n_id);$i++) {
                $data = [
                    'r_id' => $r_id,
                    'n_id' => $n_id[$i]
                ];
                $result = Db::table('role_node')->data($data)->insert();
            }
            if ($result > 0) {
                return $this->success('权限更新成功!', url('admin/Con2/func1'));
            } else {
                return $this->error('权限更新失败!');
            }
        }else {
            return $this->error('权限更新失败！');
        }
    }
}